# encoding=utf-8


class PredictFactory:
    """预测服务工厂类接口，
        任何继承此类的工厂，需要实现的事情：
            1. 预测接口
            2. 预测前的处理(通产在DataLoader里完成)
                - 通常在DataLoader失效一张张处理使用
                - 同时也是为了保存旧代码，相当于一个冗余
            3. 预测后的处理
            4. 模型预测
    """

    def predict(self, obj, **kwargs):
        o1 = self.before(obj, **kwargs)
        o2 = self.forward(o1, **kwargs)
        o3 = self.after(o2, **kwargs)
        return o3

    def before(self, obj, **kwargs):
        raise NotImplementedError

    def forward(self, obj, **kwargs):
        raise NotImplementedError

    def after(self, obj, **kwargs):
        raise NotImplementedError

    def save(self, obj, path, name, **kwargs):
        raise NotImplementedError
